Bring a large pot of salted water to a boil and cook the pasta al dente according to package instructions. Save ½ cup of pasta water
Heat olive oil in large pan over medium heat and add shallots, cooking for 1-2 minutes or until translucent. Add the ham, cooking another 1-2 minutes.
Add the tomato puree, cooking for about 10 minutes or until thickened. Salt to taste. Add the cream, mixing with the tomato sauce and let it simmer for 5 minutes.
Add the pasta to the sauce along with the cheese, butter and ¼ cup of pasta water. Stir to combine and simmer until cheese has melted and sauce has coated the pasta. Taste for seasoning. Add more pasta water if needed. Serve with some parsley and cheese on top.
Make sure the water you are cooking the pasta in is salted as some of the flavor comes from it.
DO NOT overcook the pasta when boiling. You want it just al dente or slightly under. It continues to cook with the sauce.
Don't use pre-shredded cheese. You want if finely grated so it melts well. Pre-shredded has added ingredients that will just make it clump up.
The butter can be omitted if you prefer. I like it as it adds some extra richness. You might need to add more pasta water to make up the difference.